البرمجة

نشر تطبيق Go باستخدام Nginx

كيفية نشر تطبيق ويب بلغة Go باستخدام خادم Nginx على أوبنتو 18.04

إن نشر تطبيق ويب بلغة Go (المعروفة أيضًا بـ Golang) باستخدام خادم Nginx على أوبنتو 18.04 هو عملية متعددة الخطوات تتطلب منك إتمام بعض الإجراءات التقنية. تعد لغة Go واحدة من اللغات الأكثر سرعة في تنفيذ التطبيقات، فهي تشتهر بالأداء العالي والقوة في التعامل مع التطبيقات المتوازية والموزعة، مما يجعلها خيارًا مثاليًا لتطوير تطبيقات ويب ذات أداء عالي. في هذا المقال، سوف نتعرف على كيفية نشر تطبيق Go على خادم ويب باستخدام Nginx باعتباره خادمًا عكسيًا (reverse proxy) على نظام أوبنتو 18.04.

الخطوة 1: تثبيت متطلبات النظام

قبل البدء في نشر تطبيقك باستخدام Go وNginx، يجب أولًا تثبيت جميع المتطلبات الأساسية على الخادم الخاص بك.

1.1 تحديث النظام

ابدأ بتحديث حزم النظام لديك لضمان أنك تستخدم أحدث الإصدارات المتاحة:

bash
sudo apt update sudo apt upgrade -y

1.2 تثبيت Go

إذا لم يكن لديك Go مثبتًا بالفعل، يمكنك تثبيته على أوبنتو 18.04 باستخدام الأوامر التالية:

bash
sudo apt install golang-go -y

يمكنك التحقق من النسخة المثبتة باستخدام الأمر:

bash
go version

1.3 تثبيت Nginx

من أجل تشغيل تطبيق Go على خادم ويب باستخدام Nginx، ستحتاج إلى تثبيت خادم Nginx. للقيام بذلك، استخدم الأمر التالي:

bash
sudo apt install nginx -y

بعد التثبيت، يمكنك التأكد من أن Nginx يعمل عن طريق زيارة العنوان المحلي للخادم (http://localhost) أو من خلال متصفح الويب.

bash
sudo systemctl start nginx sudo systemctl enable nginx

الخطوة 2: إعداد تطبيق Go

الآن بعد أن قمت بتثبيت جميع الأدوات الأساسية على الخادم، حان الوقت لإعداد تطبيق Go الخاص بك.

2.1 إنشاء تطبيق Go

يمكنك كتابة تطبيق Go بسيط للتأكد من أن كل شيء يعمل بشكل صحيح. افترض أن التطبيق الخاص بك عبارة عن خادم HTTP يعرض “Hello, World!” عند زيارة المتصفح.

  1. أولًا، أنشئ مجلدًا لتخزين مشروع Go:

bash
mkdir ~/go-web-app cd ~/go-web-app
  1. ثم أنشئ ملفًا باسم main.go داخل المجلد:

go
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

2.2 بناء وتشغيل التطبيق

لبناء وتشغيل تطبيق Go، يجب أولًا تأكيد أن Go مثبت بشكل صحيح. ثم يمكنك بناء تطبيقك باستخدام الأمر:

bash
go run main.go

سيتم تشغيل الخادم على المنفذ 8080 بشكل افتراضي. الآن يمكنك اختبار التطبيق من خلال زيارة:

bash
http://localhost:8080

ستظهر رسالة “Hello, World!” في متصفحك إذا كان كل شيء يعمل بشكل صحيح.

الخطوة 3: تكوين Nginx كخادم عكسي

في هذه الخطوة، سنقوم بتكوين Nginx ليكون بمثابة خادم عكسي أمام تطبيق Go. يتيح لك ذلك توجيه الطلبات إلى تطبيق Go عبر المنفذ 8080.

3.1 إنشاء ملف تكوين لـ Nginx

ابدأ بإنشاء ملف تكوين جديد في /etc/nginx/sites-available/ ليكون مخصصًا لموقعك:

bash
sudo nano /etc/nginx/sites-available/go-web-app

ثم أضف التكوين التالي:

nginx
server { listen 80; server_name your_domain_or_IP; # استبدل هذا بعنوان IP الخاص بك أو اسم النطاق location / { proxy_pass http://127.0.0.1:8080; # توجيه الطلبات إلى تطبيق Go على المنفذ 8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

3.2 تفعيل الموقع في Nginx

الآن، يجب ربط ملف التكوين الجديد بمجلد sites-enabled لتفعيل إعدادات Nginx:

bash
sudo ln -s /etc/nginx/sites-available/go-web-app /etc/nginx/sites-enabled/

3.3 التحقق من تكوين Nginx

بعد إضافة تكوين الموقع، تحقق من صحة التكوين باستخدام الأمر التالي:

bash
sudo nginx -t

إذا تم تأكيد أن التكوين صحيح، يمكنك إعادة تشغيل Nginx لتحميل التغييرات:

bash
sudo systemctl restart nginx

الخطوة 4: إعداد تطبيق Go للعمل في الخلفية

لتشغيل تطبيق Go في الخلفية حتى بعد إغلاق الجلسة، يمكنك استخدام أداة screen أو أداة systemd.

4.1 استخدام screen

لتشغيل تطبيق Go في الخلفية باستخدام screen، قم بما يلي:

  1. افتح جلسة screen جديدة:

bash
screen -S go-web-app
  1. ثم قم بتشغيل تطبيق Go:

bash
go run main.go
  1. للعودة إلى الجلسة السابقة، اضغط Ctrl + A ثم D لفصل الجلسة دون إيقاف التطبيق.

4.2 استخدام systemd لإنشاء خدمة

بدلاً من استخدام screen، يمكننا إعداد systemd لتشغيل تطبيق Go كخدمة تلقائيًا بعد إعادة تشغيل الخادم.

  1. أولًا، أنشئ ملف وحدة جديد لـ systemd في المجلد /etc/systemd/system/:

bash
sudo nano /etc/systemd/system/go-web-app.service
  1. ثم أضف التكوين التالي:

ini
[Unit] Description=Go Web App After=network.target [Service] ExecStart=/usr/local/go/bin/go run /home/your_username/go-web-app/main.go WorkingDirectory=/home/your_username/go-web-app User=your_username Group=your_group Restart=always [Install] WantedBy=multi-user.target
  1. بعد ذلك، قم بتمكين الخدمة لتبدأ تلقائيًا عند بدء التشغيل:

bash
sudo systemctl enable go-web-app.service
  1. يمكنك بدء الخدمة الآن باستخدام:

bash
sudo systemctl start go-web-app.service
  1. للتحقق من حالة الخدمة:

bash
sudo systemctl status go-web-app.service

الخطوة 5: تأمين التطبيق باستخدام HTTPS (اختياري)

من الأفضل دائمًا تأمين تطبيقك باستخدام HTTPS، خاصة إذا كان التطبيق سيُستخدم في بيئات إنتاج. لتحقيق ذلك، يمكنك استخدام Let’s Encrypt للحصول على شهادة SSL مجانية.

5.1 تثبيت Certbot

أولًا، قم بتثبيت Certbot على الخادم الخاص بك:

bash
sudo apt install certbot python3-certbot-nginx -y

5.2 الحصول على شهادة SSL

بعد تثبيت Certbot، يمكنك استخدامه للحصول على شهادة SSL وتكوين Nginx تلقائيًا لاستخدامها:

bash
sudo certbot --nginx

اتبع التعليمات التي يقدمها Certbot لتأكيد ملكية المجال، وبعد الانتهاء من ذلك، سيقوم Certbot بتحديث تكوين Nginx لإعادة توجيه جميع الطلبات إلى HTTPS.

الخطوة 6: التحقق من إعدادات التطبيق

بعد إتمام كل الخطوات السابقة، يمكنك فتح متصفحك وزيارة الموقع الخاص بك باستخدام عنوان IP الخاص بالخادم أو اسم النطاق (إن كان لديك واحد). يجب أن تكون قادرًا على رؤية “Hello, World!” من تطبيق Go عبر Nginx باستخدام HTTPS إذا كانت كل الإعدادات صحيحة.

الختام

بذلك تكون قد قمت بنشر تطبيق ويب بلغة Go باستخدام Nginx على أوبنتو 18.04. لقد غطينا جميع الخطوات الضرورية بدءًا من تثبيت الحزم اللازمة، كتابة التطبيق، تكوين Nginx كخادم عكسي، وحتى استخدام systemd لتشغيل التطبيق في الخلفية. يمكنك الآن تعزيز أداء تطبيقك وتوسيع نطاقه بشكل فعال باستخدام الأدوات التي قمنا بتغطيتها في هذا المقال.